﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Facade.Facade;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Logic.Linq;
using System.Data;
using DevExpress.Web.ASPxGridView;
using System.Configuration;
using Crosland.Automotriz.Logic.ControlExeption;
namespace Crosland.Automotriz.Web
{
    public partial class wFrmRelacionarArticuloActualizar : System.Web.UI.Page
    {

        iFacadeRelacionarArticuloActualizar BL_RelacionarArticulo = new FacadeRelacionarArticuloActualizar();
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];

        static DataTable gv = new DataTable();
        static List<tablaDetalle> listLog_Art;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

                listLog_Art = new List<tablaDetalle>();
                this.validaOperacion();
                this.listarMae();
                Panel img = (Panel)Master.FindControl("asp");
                img.Visible = false;
                btnActualizar.ClientVisible = false;
             
            }
            gvdata.DataSource = listLog_Art;
            gvdata.DataBind();
            this.FechaActualizacionStock();

        }

        private void FechaActualizacionStock() {
            
            clsSituacionArticuloLogic l = new clsSituacionArticuloLogic();
            lblStockActualizado.Text =l.RetornaFechaActualizacionStock()==null?null: Convert.ToDateTime(l.RetornaFechaActualizacionStock()).ToString("dd/MM/yyy hh:mm tt");

        }

        private void ListaArticulos()
        {
            try
            {
 grdArticulos.DataSource = BL_RelacionarArticulo.Buscar_Art_SusTop(txtBuscar.Text, Convert.ToInt32(cboopcion.Text));
            grdArticulos.DataBind();
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaArticulos");
                MensajesError(ex.Message, ex, "ListaArticulos");
            }
            catch (RunException e)
            {
                GuardarExceptionLog(e.Message, e, "ListaArticulos");
                MensajesError(e.Message, e, "ListaArticulos");
            }

           
        }

        private void BuscaArticulosRelacionado(String CodigoMaestro)
        {

            try
            {
                tablaDetalle objLog_Art_Mae = new tablaDetalle();
                clsLog_Sus_ArtLogic logser = new clsLog_Sus_ArtLogic();

                var c = from p in logser.listarDetalle(CodigoMaestro)
                        where p.COD_MATERIAL == CodigoMaestro
                        select p;
                foreach (var s in c)
                {
                    objLog_Art_Mae.ID_MATERIAL = (int)s.ID_MATERIAL;
                    objLog_Art_Mae.ID_MATERIAL_SUS = (int)(s.ID_MATERIAL_SUS);
                    objLog_Art_Mae.COD_MATERIAL = s.COD_MATERIAL;
                    objLog_Art_Mae.COD_MATERIAL_SUS = s.COD_MATERIAL_SUS;
                    objLog_Art_Mae.ID_SUS_ART_MAE = (int)(s.ID_SUS_ART_MAE);
                    objLog_Art_Mae.CANTIDAD = Convert.ToDecimal(s.CANTIDAD);
                    objLog_Art_Mae.DE_TIPO_SUS = s.DESCRIPCION;
                    objLog_Art_Mae.DES_MATERIAL_SUS = s.DESCRIPCION_SUS;
                    listLog_Art.Add(objLog_Art_Mae);
                }


                gvdata.DataSource = listLog_Art;
                gvdata.DataBind();


            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "BuscaArticulosRelacionado");
                MensajesError(ex.Message, ex, "BuscaArticulosRelacionado");
            }
            catch (RunException e)
            {
                GuardarExceptionLog(e.Message, e, "BuscaArticulosRelacionado");
                MensajesError(e.Message, e, "BuscaArticulosRelacionado");
            }

        }

        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }
        private void ObtenerDatosPopup()
        {

            if (Session["oper"].ToString() == "bus1")
            {
                int i = grdArticulos.FocusedRowIndex;
                txtcodigoMaestro.Text = Convert.ToString(grdArticulos.GetRowValues(i, "COD_MATERIAL"));
                txtDescripcionMaterialMae.Text = Convert.ToString(grdArticulos.GetRowValues(i, "DES_MATERIAL"));
                txtIdMaterialMaestro.Text = Convert.ToString(grdArticulos.GetRowValues(i, "ID_MATERIAL"));

                this.BuscaArticulosRelacionado(txtcodigoMaestro.Text);

            }
            else if (Session["oper"].ToString() == "bus2")
            {
                int i = grdArticulos.FocusedRowIndex;
                txtCodigoSustituto.Text = Convert.ToString(grdArticulos.GetRowValues(i, "COD_MATERIAL"));
                txtDescripcionMaterialSustituto.Text = Convert.ToString(grdArticulos.GetRowValues(i, "DES_MATERIAL"));
                txtIdmaterialSustituto.Text = Convert.ToString(grdArticulos.GetRowValues(i, "ID_MATERIAL"));
            }
            else
            {
                return;

            }

            btnAgregar.ClientVisible = true;
            btnActualizar.ClientVisible = false;
        }

        private void validaOperacion()
        {

            if (Session["operacion"].ToString() == "M")
            {

                txtcodigoMaestro.Text = Session["COD_MATERIAL"].ToString();
                txtDescripcionMaterialMae.Text = Convert.ToString(Session["DESCRIPCION_MAE"]);
                cboTipoRelacion.SelectedIndex = 0;
                listLog_Art = new List<tablaDetalle>();
                this.BuscaArticulosRelacionado(Session["COD_MATERIAL"].ToString());
                txtComentario.Text = Convert.ToString(gvdata.GetRowValues(0, "OBSERVACION"));
                txtCodigoSustituto.Text = Convert.ToString(gvdata.GetRowValues(0, "COD_MATERIAL_SUS"));
                txtDescripcionMaterialSustituto.Text = Convert.ToString(gvdata.GetRowValues(0, "DES_MATERIAL_SUS"));
                cboTipoRelacion.Value = Convert.ToString(Session["ID_SUS_ART_MAE"]);
                txtCantidad.Text = Convert.ToString(gvdata.GetRowValues(0, "CANTIDAD"));
                btnAbrirPopup1.ClientEnabled = false;

            }

        }

        private void listarMae()
        {

       
            cboTipoRelacion.DataSource = BL_RelacionarArticulo.listarMae();
            cboTipoRelacion.ValueField = "ID_SUS_ART_MAE";
            cboTipoRelacion.TextField = "DESCRIPCION";
            cboTipoRelacion.DataBind();

        }

        public struct tablaDetalle
        {



            public int ID_MATERIAL { get; set; }
            public int ID_MATERIAL_SUS { get; set; }
            public string COD_MATERIAL { get; set; }
            public string COD_MATERIAL_SUS { get; set; }
            public double ID_SUS_ART_MAE { get; set; }
            public decimal CANTIDAD { get; set; }
            public string DE_TIPO_SUS { get; set; }
            public string DES_MATERIAL_SUS { get; set; }
            public string OBSERVACION { get; set; }

        }

        private void Grabar(int id_material, string cod_material)
        {

            try
            {
                foreach (tablaDetalle row in listLog_Art)
                {

                    T_LOG_ARTICULO_RELACIONADO ArtMaeSus_Ent = new T_LOG_ARTICULO_RELACIONADO();

                    BL_RelacionarArticulo.PA_EliminarDetalle(row.COD_MATERIAL.ToString(), row.COD_MATERIAL_SUS.ToString());

                    ArtMaeSus_Ent.ID_MATERIAL = id_material;
                    ArtMaeSus_Ent.ID_MATERIAL_SUS = row.ID_MATERIAL_SUS;
                    ArtMaeSus_Ent.COD_MATERIAL = cod_material;
                    ArtMaeSus_Ent.COD_MATERIAL_SUS = row.COD_MATERIAL_SUS.ToString();
                    ArtMaeSus_Ent.ID_SUS_ART_MAE = Convert.ToInt32(row.ID_SUS_ART_MAE);
                    ArtMaeSus_Ent.CANTIDAD = Convert.ToDecimal(row.CANTIDAD.ToString());
                    ArtMaeSus_Ent.OBSERVACION = row.OBSERVACION;


                    if (BL_RelacionarArticulo.Insertar(ArtMaeSus_Ent))
                    {
                        lblMsj.Text = string.Empty;
                        lblMsj.Text = "Se Grabó correctamente!";
                        popupmsj.ShowOnPageLoad = true;
                    }

                }

            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Grabar");
                MensajesError(ex.Message, ex, "Grabar");
            }
            catch (RunException e)
            {
                GuardarExceptionLog(e.Message, e, "Grabar");
                MensajesError(e.Message, e, "Grabar");
            }

            //catch (Exception e)
            //{
            //    String mensajesError = String.Empty;
            //    while (e != null)
            //    {
            //        mensajesError += e.Message + Environment.NewLine;
            //        e = e.InnerException;
            //    }
            //    lblMsj.Text = string.Empty;
            //    lblMsj.Text = "Error: " + Environment.NewLine + mensajesError;
            //    popupmsj.ShowOnPageLoad = true;

            //}




        }

        private void ValidaOperacionxGrabar()
        {

            if (Session["operacion"].ToString() == "N")
            {

                this.Grabar(Convert.ToInt32(txtIdMaterialMaestro.Text), txtcodigoMaestro.Text);
            }
            else if (Session["operacion"].ToString() == "M")
            {
                this.Grabar(Convert.ToInt32(Session["ID_MATERIAL"]), Convert.ToString(Session["COD_MATERIAL"]));
            }
            else { return; }

        }

        bool ValidaCamposNull()
        {


            if (txtcodigoMaestro.Text == null)
            {

                lblMsj.Text = "Ingrese codigo Maestro!";
                popupmsj.ShowOnPageLoad = true;
                return true;
            }
            if (gvdata.VisibleRowCount == 0)
            {


                lblMsj.Text = "Agregue codigo sustito !";
                popupmsj.ShowOnPageLoad = true;
                return true;
            }

            return false;

        }

        private void agregarDatosGriv()
        {
            try
            {
                if (txtDescripcionMaterialSustituto.Text == string.Empty || txtCodigoSustituto.Text == string.Empty)
                {

                    lblMsj.Text = "Ingrese articulos para agregar a la grilla";
                }
                else
                {
                    tablaDetalle objLog = new tablaDetalle();
                    objLog.COD_MATERIAL = Session["operacion"].ToString() == "M" ? Session["COD_MATERIAL"].ToString() : txtcodigoMaestro.Text;
                    objLog.COD_MATERIAL_SUS = txtCodigoSustituto.Text;
                    objLog.DE_TIPO_SUS = cboTipoRelacion.SelectedItem.Text;
                    objLog.ID_SUS_ART_MAE = Convert.ToInt32(cboTipoRelacion.SelectedItem.Value.ToString());
                    objLog.CANTIDAD = Convert.ToDecimal(txtCantidad.Text);
                    objLog.DES_MATERIAL_SUS = txtDescripcionMaterialSustituto.Text;
                    objLog.ID_MATERIAL_SUS = Convert.ToInt32(txtIdmaterialSustituto.Text);
                    objLog.OBSERVACION = txtComentario.Text;
                    listLog_Art.Add(objLog);
                    gvdata.DataSource = listLog_Art;
                    gvdata.DataBind();
                    btnAbrirPopup1.ClientEnabled = false;
                    txtComentario.Text = string.Empty;

                }
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "agregarDatosGriv");
                MensajesError(ex.Message, ex, "agregarDatosGriv");

            }
            catch (RunException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "agregarDatosGriv");
                MensajesError(ex.Message, ex, "agregarDatosGriv");
            }
            //catch { }
        }

        private void LimpiarBusqueda() {
            txtBuscar.Text = string.Empty;
            grdArticulos.DataSource = null;
            grdArticulos.DataBind();
        
        
        }

        protected void btnAbrirPopup1_Click(object sender, EventArgs e)
        {
            Session["oper"] = "bus1";
            PopupBuscarArticulos.ShowOnPageLoad = true;
        }

        protected void btnAbrirPopup2_Click(object sender, EventArgs e)
        {
            Session["oper"] = "bus2";
            PopupBuscarArticulos.ShowOnPageLoad = true;
        }

        protected void btnBuscarPopup_Click(object sender, EventArgs e)
        {
            this.ListaArticulos();
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            if (ValidaCamposNull())
            { return; }
            this.ValidaOperacionxGrabar();
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            this.agregarDatosGriv();
        }

        protected void gvdata_FocusedRowChanged(object sender, EventArgs e)
        {
            txtComentario.Text = Convert.ToString(gvdata.GetRowValues(gvdata.FocusedRowIndex, "OBSERVACION"));
            txtCodigoSustituto.Text = Convert.ToString(gvdata.GetRowValues(gvdata.FocusedRowIndex, "COD_MATERIAL_SUS"));
            txtDescripcionMaterialSustituto.Text = Convert.ToString(gvdata.GetRowValues(gvdata.FocusedRowIndex, "DES_MATERIAL_SUS"));
            cboTipoRelacion.Text = Convert.ToString(gvdata.GetRowValues(gvdata.FocusedRowIndex, "DE_TIPO_SUS"));
            txtCantidad.Text = Convert.ToString(gvdata.GetRowValues(gvdata.FocusedRowIndex, "CANTIDAD"));
            btnAgregar.ClientVisible = false;
            btnActualizar.ClientVisible = true;
        }

        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            try
            {
                listLog_Art.Clear();

                clsLog_Sus_ArtLogic Actualiza = new clsLog_Sus_ArtLogic();
                string cod_material_sus = txtCodigoSustituto.Text;
                string observacion = txtComentario.Text;
                int id_sus_art_mae = Convert.ToInt32(cboTipoRelacion.Value);
                decimal cantidad = Convert.ToDecimal(txtCantidad.Text);

                Actualiza.Actualizar_log_sus_art(Session["operacion"].ToString() == "N" ? Convert.ToInt32(txtIdMaterialMaestro.Text) : Convert.ToInt32(Session["ID_MATERIAL"]), cod_material_sus, observacion, id_sus_art_mae, cantidad);
                this.BuscaArticulosRelacionado(txtcodigoMaestro.Text);
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "btnActualizar_Click");
                MensajesError(ex.Message, ex, "btnActualizar_Click");
            }
            catch (RunException exe)
            {
                GuardarExceptionLog(exe.Message, exe, "btnActualizar_Click");
                MensajesError(exe.Message, exe, "btnActualizar_Click");
            }
            //catch
            //{


            //}
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("/Repuestos/wFrmRelacionarArticulo.aspx?id=" + idNegocio);
        }

        protected void btnaceptar_Click(object sender, EventArgs e)
        {
            this.ObtenerDatosPopup();
            this.LimpiarBusqueda();
            PopupBuscarArticulos.ShowOnPageLoad = false;
        }

        protected void grdArticulos_AfterPerformCallback(object sender, ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListaArticulos();
        }

        protected void grdArticulos_PageIndexChanged(object sender, EventArgs e)
        {
            this.ListaArticulos();
        }



    }
}